# -*- coding: utf-8 -*-
from django.contrib.sites.models import Site
from django.db import models
from django.core.urlresolvers import reverse
from datetime import datetime

class Unit(models.Model):
    title = models.CharField(u'Название', max_length=250, help_text=u'Внимание! Тут вводится полное название!')
    abb = models.CharField(u'Аббревиатура', max_length=250)

    def __unicode__(self):
        return u'%s' % self.abb

    def get_employees(self):
        return Employee.objects.filter(actual_unit__pk=self.pk, dismissed=False)

    def get_employees_rsis(self):
        return Employee.objects.filter(actual_unit__pk=self.pk, worker_or_rsis='R').order_by('actual_unit', 'dismissed')

    def get_employees_work(self):
        return Employee.objects.filter(actual_unit__pk=self.pk, worker_or_rsis__startswith='W').order_by('actual_unit', 'dismissed')

    class Meta:
        verbose_name = u'подразделение'
        verbose_name_plural = u'Подразделения'

class Profession(models.Model):
    code = models.CharField(u'Код', max_length=250, primary_key=True, unique=True)
    title = models.CharField(u'Название', max_length=250)

    def __unicode__(self):
        return self.title

    class Meta:
        verbose_name = u'профессия'
        verbose_name_plural = u'Профессии'


GENDER_CHOICES = (
        (u'м', 'Муж'),
        (u'ж', 'Жен'),
    )

W_R_CHOICES = (
        ('W0', 'Рабочий'),
        ('W1', 'Рабочий 1 разряд'),('W2', 'Рабочий 2 разряд'),('W3', 'Рабочий 3 разряд'),
        ('W4', 'Рабочий 4 разряд'),('W5', 'Рабочий 5 разряд'),('W6', 'Рабочий 6 разряд'),
        ('W7', 'Рабочий 7 разряд'),('W8', 'Рабочий 8 разряд'),('W9', 'Рабочий 9 разряд'),
        ('R', 'РСиС'),
    )

class Employee(models.Model):
    name = models.CharField(u'Имя', max_length=50)
    lastname = models.CharField(u'Фамилия', max_length=50)
    patronymic = models.CharField(u'Отчество', max_length=50)
    tabel_number = models.CharField(u'Табельный номер', max_length=70, unique=False)
    permanent_number = models.CharField(u'Постоянный номер', max_length=60, unique=True)
    birthday = models.DateField(u'День рождения')
    gender = models.CharField(u'Пол',choices=GENDER_CHOICES, max_length=3)
    vacation_privilege = models.BooleanField(u'Льгота по отпуску?', help_text=u'Имеется ли у сотрудника льгота по отпуску?')
    worker_or_rsis = models.CharField(u'Класс',choices=W_R_CHOICES, max_length=3, blank=True)
    operative_repair = models.BooleanField(u'Оперативный ремонт?', help_text=u'Принадлежит ли сотрудник к группе оперативного ремонта?')
    equip = models.CharField(u'Оборудование', max_length=250, help_text=u'К какому оборудованию закреплён сотрудник?')
    profession = models.ForeignKey(Profession, verbose_name=u'Профессия', null=True, blank=True)
    unit = models.ForeignKey(Unit, verbose_name=u'Подразделение', null=True, blank=True)
    actual_unit = models.ForeignKey(Unit, verbose_name=u'Фактическое подразделение', null=True, blank=True, related_name='actual_unit')
    passport = models.CharField(u'Паспортные данные', max_length=200, blank=True)
    address = models.CharField(u'Домашний адрес', max_length=200)
    phone = models.CharField(u'Домашний телефон', blank=True, null=True, max_length=100)
    mobile_phone = models.CharField(u'Сотовый телефон', blank=True, null=True, max_length=100)
    dismissed = models.BooleanField(u'Уволен?', default=False)
    email = models.EmailField(u'Почтовый ящик', blank=True, null=True)
    photo = models.ImageField(u'Фотография', blank=True, null=True, upload_to='photos')
    kvartal = models.CharField(u'Квартал', blank=True, max_length=3)
    
    def __unicode__(self):
        return u'%s %s.%s.' % (self.lastname, self.name[0].upper(), self.patronymic[0].upper())

    def get_absolute_url(self):
        return reverse('employee_detail', args=[self.pk])

    def get_full_url(self):
        return u'<a href="%s" title="%s">%s</a>' % (self.get_absolute_url(), self.get_fio(), self.__unicode__())

    def get_age(self):
        return str(datetime.now().year - self.birthday.year)

    def get_fio(self):
        return u'%s %s %s' % (self.lastname, self.name, self.patronymic)

    def save(self, *args, **kwargs):
        self.name = self.name.upper()
        self.lastname = self.lastname.upper()
        self.patronymic = self.patronymic.upper()
        super(Employee, self).save(*args, **kwargs)
        if self.dismissed:
            DismissedEmployee.objects.get_or_create(employee=self)
        else:
            try:
                DismissedEmployee.objects.get(employee=self).delete()
            except DismissedEmployee.DoesNotExist:
                pass


    class Meta:
        verbose_name = u'Сотрудник'
        verbose_name_plural = u'Сотрудники'
        permissions = (
            ("can_view_dis_e", u'Уволеные - просмотр'),
            ("can_view_orep", u'Опре.Ремонт - просмотр'),
            ("can_view_empl", u'Сотрудник - просмотр'),
        )

class DismissedEmployee(models.Model):
    employee = models.ForeignKey(Employee)
    dismiss_date = models.DateField(auto_now=True)

    def __unicode__(self):
        return u'%s' % self.employee

    class Meta:
        verbose_name = u'Уволенный сотрудник'
        verbose_name_plural = u'Уволенные Сотрудники'

class CurrentSite(models.Model):
    site = models.ForeignKey(Site, verbose_name=u"Сайт", unique=True)
    chief = models.CharField(verbose_name=u"Начальник отдела", blank=True, null=True, max_length=240)
    chairman = models.CharField(verbose_name=u"Председатель цехкома", blank=True, null=True, max_length=240)
    report_time = models.CharField(u'Время сдачи отчёта', max_length=5, default='15:00')
    vac_access = models.BooleanField(default=False, verbose_name=u"Доступ к редактированию отпусков")

    def __unicode__(self):
        return self.site.name

    class Meta:
        verbose_name=u"настройку сайта"
        verbose_name_plural=u"Настройки сайта"
        app_label = 'sites'


TMPL_CHOICES = (
               ('R_O','Отчет о ремонте'),
               ('R_F', 'Наряд-разрешение'),
               ('R_V', 'Отпуска'),
)

class XLS_templates(models.Model):
    name = models.CharField(choices=TMPL_CHOICES,  verbose_name=u"Название", max_length=100)
    file= models.FileField(verbose_name=u"Файл", upload_to='xls')

    class Meta:
        verbose_name=u"Шаблон отчетов"
        verbose_name_plural=u"Шаблоны отчетов"
        app_label = 'sites'